package models;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPSocket {

	private DatagramSocket socketUDP;
	private int rcvPorta = 0;
	private InetAddress rcvIP = null;

	public UDPSocket(int porta) {
		try {
			socketUDP = new DatagramSocket(porta);
		}catch(Exception e){
    		System.out.println(e.getMessage());
    	}
	}
	
	public void stop(){
		socketUDP.close();
	}
	
	public String receberMsg(){
		while(true){ 
	    	try{
	    	    byte[ ] DadosRec = new byte[1024]; 
	    		DatagramPacket pacote = new DatagramPacket(DadosRec, DadosRec.length); 
		        socketUDP.receive(pacote); 
		        rcvIP = pacote.getAddress(); 
		        rcvPorta = pacote.getPort(); 
		        String msg = new String(pacote.getData());
		        return msg;
	    	}catch(Exception e){
	    		System.out.println(e.getMessage());
	    	}
	    } 
	} 
	
	public void enviarMsg(String msg, String ip, int porta){
        try {
		    byte[ ] DadosEnv  = new byte[1024]; 
			DadosEnv = msg.getBytes();
	        DatagramPacket pacote = new DatagramPacket(DadosEnv, DadosEnv.length, 
	        		InetAddress.getByName(ip), porta);
			socketUDP.send(pacote);
    	}catch(Exception e){
    		System.out.println(e.getMessage());
    	}
	}

	public void enviarMsg(String msg, InetAddress ip, int porta){
        try {
		    byte[ ] DadosEnv  = new byte[1024]; 
			DadosEnv = msg.getBytes();
	        DatagramPacket pacote = new DatagramPacket(DadosEnv, DadosEnv.length, ip, porta);
			socketUDP.send(pacote);
    	}catch(Exception e){
    		System.out.println(e.getMessage());
    	}
	}

	public int getRcvPorta() {
		return rcvPorta;
	}

	public InetAddress getRcvIp() {
		return rcvIP;
	}
	
}
